<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
</html>
<script>
    function myPermutation(str){
        // 空字符串直接返回吧
 if(str.length === 0){
  console.log('The string you input have No length!');
  return;
 }
        // 一个字符也不用运算
 if(str.length === 1){
  console.log('The result array is: ' + str, '-&- The array length is: ' + str.length);
  return;
 }
        // 长度2以上的开始计算
        /* 先把字符串转成数组，因为js里关于字符串的函数不多，而关于数组的函数很多，所以中间步骤我们都用数组处理，比较方便 */
 
 var arrayStr = str.split('');
        /* 定义一个中间数组，作为每次大循环的根基。比如，你开始拿第3个字符去填充空位，那前2个字符的全排列就已经都存储在中间数组里了 */
        // 你开始拿第4个字符去填充空位，那前3个字符的全排列就已经都存储在中间数组里了
 
 var transArray = [];
        /* 先把字符串的第1个字符存入中间数组，这是我们盖高楼的地基。此字符产生的两个空位，我们拿第2个字符开始去填充 */
 transArray.push(arrayStr[0]);
        // 定义一个存储最终结果的数组，作为返回值
 var resultArray = [];
        /* 第一层循环，从第2个字符开始，每次向字符串后取一个字符，往 中间数组 的每个字符串的 空位 里插 */
 for(var i = 1; i < arrayStr.length; i++){
  resultArray = [];
            // 每次新取到的字符
  var addChar = arrayStr[i];
            /* 第二层循环，取一个 中间数组里 用以形成空位的 字符串，中间数组的长度就是此新字符前面的所有字符形成的全排列个数 */
  for(var j = 0; j < transArray.length; j++){
                // 依次取中间数组里的串
   var toBeInsertStr = transArray[j];
                // 用空格分割字符串，从而产生空位
   var toBeInsertStrArray = toBeInsertStr.split('');
                // 第三层循环，将取到的新字符分别放到空位上形成字符串，有多少空位就循环几次
   for (var k = 0; k <= transArray[j].length; k++){
    tempArray = toBeInsertStrArray.concat();
                // 用splice函数处理，表示将字符填入空位
    var insertedArray = toBeInsertStrArray.splice(k, 0, addChar);
                    // 刚才是数组操作，现在转成字符串
    var transArrayItem = toBeInsertStrArray.join('');
                    // 将字符串压入结果数组
    resultArray.push(transArrayItem);
    toBeInsertStrArray = tempArray.concat();
   }
  }
  transArray = [];
  transArray = resultArray.concat();
 }
 console.log(resultArray);
 //console.log('The result array is: ' + resultArray, '-&- The array length is: ' + resultArray.length);
     
}
myPermutation('abc');


</script>